public class Test3 {
    public class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(){}
        TreeNode(int val){
            this.val = val;
        }
    }
    public boolean isBalanced(TreeNode root) {
        return getHeight(root) >= 0;
    }
    //获取树的高度
    public int getHeight(TreeNode root){
        if(root == null){
            return 0;
        }
        //获取左子树高度
        int leftH = getHeight(root.left);
        //获取右子树高度
        int rightH = getHeight(root.right);
        /*如果一个节点左树不平衡（返回-1），右树为空（返回0）。它不是个平衡二叉树，但是它满足左右子树高度差为1
        * 所以这里限制左右子树高度都大于0*/
        if (leftH >= 0 && rightH >= 0 &&
        Math.abs(leftH - rightH)<=1){
            return Math.max(leftH,rightH)+1;
        }else {
            return -1;
        }
        /*为什么不能在第一个不平衡的二叉树出现时就结束？
        * 因为你是判断高度的方法，不是判断平衡的方法。
        * false应该在另一个方法中被返回*/
    }
}

